package com.itheima.api.stream.demo07;

import java.util.ArrayList;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * Stream流中的收集操作，把Stream流中的元素收集到集合中
 */
public class StreamDemo01 {

    public static void main(String[] args) {

        // 1. 创建一个ArrayList集合对象
        ArrayList<Integer> arrayList = new ArrayList<Integer>() ;

        // 2. 添加元素
        arrayList.add(23) ;
        arrayList.add(12) ;
        arrayList.add(34) ;
        arrayList.add(56) ;
        arrayList.add(33) ;
        arrayList.add(56) ;

        // 需求：获取元素 >= 34的流对象
        Stream<Integer> stream = arrayList.stream().filter(s -> {
            if (s >= 34) {
                return true;
            } else {
                return false;
            }
        });

        // 调用这个方法进行收集操作： R collect(Collector collector)
        // 需求: 把流中的元素收集到List集合中
        // 如何获取到List集合的收集器呢？ 通过Collectors中的静态方法进行获取
        // public static <T> Collector toList()
//        List<Integer> collect = stream.collect(Collectors.toList());
//        collect.forEach( s -> System.out.println(s) );

        System.out.println("------------------------------------------------");

        // 需求: 把流中的元素收集到Set集合中
        Set<Integer> set = stream.collect(Collectors.toSet());
        set.forEach( s -> System.out.println(s) );

        System.out.println("-------------------------------------------------");

        // 创建一个ArrayList集合对象
        ArrayList<String> arrayList1 = new ArrayList<String>() ;

        // 添加元素
        arrayList1.add("张三,23") ;
        arrayList1.add("李四,24") ;
        arrayList1.add("王五,20") ;
        arrayList1.add("赵六,36") ;

        // 需求：获取arrayList1中年龄 >= 23的元素对应的流对象
        Stream<String> stringStream = arrayList1.stream().filter(s -> {      // s代表的就是集合中的每一个元素

            //对字符串进行切割操作，获取年龄进行判断
            String[] split = s.split(",");
            String ageStr = split[1];

            // 把字符串转换成int类型
            int age = Integer.parseInt(ageStr);

            // 判断
            if (age >= 23) {
                return true;
            } else {
                return false;
            }

        });

        System.out.println("----------------------------------------------------");

        // 需求：把流中的元素收集到Map集合中，键是姓名 ， 值是年龄
        // Collector toMap(Function keyMapper, Function valueMapper)
        // R apply(T t);
        // 第一个Function表示的就是构建键的接口
        // 第一个Function表示的就是构建值的接口
        // s表示的就是我们流中的每一个字符串： "赵六,36"
        Map<String, Integer> collect = stringStream.collect(Collectors.toMap((s) -> {
            String[] info = s.split(",");
            return info[0];
        }, (s) -> {
            String[] info = s.split(",");
            return Integer.parseInt(info[1]);
        }));

        // 对返回的Map进行遍历操作
        collect.forEach( (key , value) -> System.out.println(key + "----" + value) );

    }

}
